﻿// 603 平面最近点对.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <algorithm>
#include <cmath>


using namespace std;
/*
http://oj.daimayuan.top/course/22/problem/979

给定平面上 n个点，你需要求出其中最近的一对点的欧几里得距离。

输入格式
第一行一个整数 n。

接下来 n行，每行两个数 xi,yi， 表示一个点的坐标。

输出格式
输出一行一个数表示答案，相对误差或绝对误差在 10−6内即为正确。

样例输入
3
1.0 2.0
1.0 3.0
1.0 5.0
样例输出
1.00000000
数据规模
对于 100%的数据，保证 1≤n≤2×105,0≤xi,yi≤109。
*/
struct Node {
	double x, y;
	bool operator <(const Node& A)const {
		return x < A.x;
	}
}a[200001], c[200001];
int n;
 
double solve(int l, int r)
{
	if (l == r)
		return 1e10;
	int m = (l + r) >> 1;
	double d = min(solve(l, m), solve(m+1, r));

	int cnt = 0;
	for (int i = l; i <= r; i++) {
		if (abs(a[i].x - a[m].x) < d)
			c[++cnt].x = a[i].y; c[cnt].y = a[i].x;
	}
	sort(c + 1, c + 1 + cnt);
	for (int i = 1; i <= cnt; i++)
		for (int j = i + 1; j <= cnt && c[j].x - c[i].x < d; j++)
			d = min(d, sqrt((c[i].x - c[j].x) * (c[i].x - c[j].x) +
				(c[i].y - c[j].y) * (c[i].y - c[j].y)));

	return d;
}



int main()
{
	scanf("%d",&n);
	for (int i = 1; i <= n; i++)
		scanf("%lf%lf",&a[i].x,&a[i].y);
	sort(a + 1, a + 1 + n);
	printf("%.10f\n",solve(1,n));


	return 0;
}

 